package com.geovis.emergency.spd.biz.pc.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.geovis.emergency.spd.entity.mobile.pojo.vo.MobileDutyTree;
import com.geovis.emergency.spd.entity.pc.entity.PcDuty;
import com.geovis.emergency.spd.entity.pc.pojo.dto.PcDrillDutyOrganDTO;
import com.geovis.emergency.spd.entity.pc.pojo.dto.PcDrillDutyStatisticDTO;
import com.geovis.emergency.spd.entity.pc.pojo.dto.PcDutyDTO;
import com.geovis.emergency.spd.entity.pc.pojo.dto.PcDutyImtDTO;
import com.geovis.emergency.spd.entity.pc.pojo.vo.PcDrillDutyOrgVO;
import com.geovis.emergency.spd.entity.pc.pojo.vo.TreeVO;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * <p>
 * 应急预案指挥模块-值班排班表 服务类
 * </p>
 *
 * @author 曾德实
 * @since 2022-04-30
 */
public interface IPcDutyService extends IService<PcDuty> {

    /**
     * 演练值班排班
     *
     * @param imtDTO
     */
    void imt(PcDutyImtDTO imtDTO);

    /**
     * 获取组织机构签到情况
     * @param pcDrillId
     * @return
     */
    List<PcDrillDutyOrgVO> getOrgCallTree(String pcDrillId);

    /**
     * 重新演练值班排班
     * @param imtDTO
     */
    void reImt(PcDutyImtDTO imtDTO);
    /**
     * 查询值班人员信息
     *
     * @param personId
     * @return
     */
    PcDutyDTO getByPersonId(String personId);

    /**
     * 根据演练ID查询值班列表
     *
     * @param drillId
     * @return
     */
    @Cacheable(key = "#drillId", value = "getByDrillId")
    List<PcDutyDTO> getByDrillId(String drillId);

    /**
     * 查询值班组列表
     *
     * @param drillId
     * @return
     */
    List<PcDrillDutyStatisticDTO> getGroupByDrillId(String drillId);

    /**
     * 值班机构
     *
     * @param drillId
     * @return
     */
    List<PcDrillDutyOrganDTO> getDutyOrganByDrillId(String drillId);

    /**
     * 值班排班表Excel
     * @param file
     * @return
     */
    List<PcDuty> readDutyExcelData(String drillId,MultipartFile file);

    /**
     * 值班排班编组
     * @param groupList
     * @return
     */
    List<TreeVO> dutyTree(String drillId,List<String> groupList,boolean emptyUser);

    /**
     * 查询某演练某父级岗位下的岗位信息和人员人员
     * @param drillId 演练id
     * @param parentId 父级id 默认0
     * @return
     */
    List<MobileDutyTree> getDutyUser(String drillId, String parentId);


    List<PcDuty> myGroupList(String drillId);
}
